/**
 * @param {number[]} nums1
 * @param {number[]} nums2
 * @return {number[]}
 */
var nextGreaterElement = function (nums1, nums2) {
    let len1 = nums1.length
    let num1Map = new Map()
    let stack = []
    let result = new Array(len1).fill(-1)

    nums1.forEach((item, index) => {
        num1Map.set(item, index)
    })

    console.log(num1Map);
    for (let idx = 0; idx < nums2.length; idx++) {
        // 当前的这个数值
        const ele = nums2[idx];

        while (stack.length && ele > nums2[stack.at(-1)]) {
            // 这是栈最后面的那个下标
            let cur = stack.pop()

            // 根据下标找到nums2数组中的值,
            // 在根据值找到map中的下标,
            // 这个下标就是nums1中这个数值的下标,也是最后结果的想下标
            // 再赋值
            let index = num1Map.get(nums2[cur])
            result[index] = ele

        }
        if (num1Map.has(ele)) {
            // 把下标添加进去.
            stack.push(idx)
        }
    }
    console.log(result);
    return result

};


nextGreaterElement([2, 4], [1, 2, 3, 4])